Media relay

ABSTRACT

A method, system and computer program product for displaying media is provided herein. The method includes the steps of receiving, at a media server, streaming media from a source device located at a first user&#39;s premises and transmitting the streaming media from the media server to a display device at the second user&#39;s premises. The media server is located remotely from both the first user&#39;s premises and the second user&#39;s premises. The first user&#39;s premises and the second user&#39;s premises may be the same. The media server may be located at a cable television headend.

BACKGROUND OF THE INVENTION Field of the Invention

The invention generally relates to the display of the output of a computational device, including the display of internet-based media, on a television.

Background Art

Users wishing to display the output of a computational device, such as a personal computer or laptop, on a television screen typically cannot do so without physically connecting the two via a display cable. Typically, there are multiple impediments to doing such. Users must first acquire a suitable cable. They must possess sufficient familiarity with their computational device and their television to acquire the correct cable, connect it correctly to both devices, and to be able to switch inputs on the television, as needed. If the computational device is already connected to a display, there may not be a suitable output connector available. If the television is already connected to multiple signal sources, there may not a suitable input connector available.

What is needed is a method and a system to overcome these limitations, enabling users to display the output of computational devices, including internet-based media, on their televisions, while avoiding the cost and complexity of existing systems and methods.

BRIEF DESCRIPTION OF THE DRAWINGS/FIGURES

The accompanying drawings, which are included to provide a further understanding of the invention and are incorporated in and constitute a part of this specification, illustrate embodiments of the invention and together with the description serve to explain the principles of the invention. In the drawings:

FIG. 1 illustrates an example media relay system according to an embodiment of the invention.

FIG. 2 illustrates an example flow diagram that illustrates a media relay process according to an embodiment of the invention.

The present invention will now be described with reference to the accompanying drawings. In the drawings, like reference numbers may indicate identical or functionally similar elements.

DETAILED DESCRIPTION OF THE INVENTION

Embodiments presented herein allow a source device to relay media through a media server to a display device. In an example, the source device and the display device are located in the same premises and the media server is located remote to the source device and the display device. In another example, the source device and the display device are remotely located from each other and from the media server. “Media” as referred to herein may be streaming media such as video or audio. However, it is to be appreciated that “media” may encompass any item on a source device including but not limited to images and documents of any format.

In an example, the source device may be located behind a network address translation (NAT) device. In another example both source device and the media server may be located behind a NAT device. It is to be appreciated that either the source device, the media server or both may be located behind a NAT device. It is also to be appreciated that in embodiments, either the source device or the media server or neither may be located behind a NAT device. A NAT device, may be, for example, a router, firewall or other computational device. A NAT device converts private Internet Protocol (IP) addresses of a client computational device (such as the source device or media server) that is behind it on an internal private network to one or more public IP addresses for the Internet. It may change packet headers to the converted IP address and keep track of the headers via internal tables. When packets come back from the Internet, the NAT device may use the tables to perform a reverse conversion to the IP address of the client computational device. NAT allows a single device, such as a router, to act as agent between the Internet (or “public network”) and a local (or “private”) network. In an embodiment, media is transmitted by the source device via the Internet and is received by the display device via a cable television network. The media server may be located at a cable television headend. The display device may be a television (TV). However, other display devices are contemplated. The computational device may be a user's personal computational device such as a personal computer or a laptop.

In an embodiment presented herein, media on a user's personal computational device can be viewed via the cable television network on the user's TV without directly connecting the computational device to the TV. For example, a user may launch an application on their computational device which streams the desired media to a media server that may be located at a television cable headend remote from the user's premises. The user may then tune to a particular television channel, such as a channel on a cable set-top box, dedicated for media relay. The cable television headend may transcode the received media and transmit the media via a cable television network to the user's set top box. The set top box displays the received media on the user's TV.

Embodiments presented herein further allow communication with systems behind a NAT, without using traditional NAT traversal techniques such as Transmission Control Protocol (TCP) hole punching, Universal Plug and Play (UPnP), port forwarding or a proxy server. Traditional NAT traversal techniques may require a manual setup step by a user to create a port-forwarding entry in the user's NAT to enable outside access to the streaming source device. This port-forwarding has two drawbacks. First, because of the manual setup by the user it is a potential source of failure resulting in customer support requests due to the level of complexity and knowledge required for the manual setup. Second, it is a potential security issue because it creates an outside accessible port to the source device that could be hacked by a malicious third party client. Simple solutions such as a proxy server, TCP hole-punching or UPnP are either not scalable or are not without problems on the client side.

FIG. 1 illustrates an example media relay system 100 according to an embodiment of the invention.

Media relay system 100 includes a source device 102, media server 104, authorization server 110, rendezvous server 112, set top box 116, and display device 118. In an example, media server 104 may be located behind a NAT device 108 and source device 102 may be located behind a NAT device 106. In another example, only media server 104 may be located behind NAT device 108. NAT device 106 and NAT device 108, may be, for example, routers. Source device 102, set top box 116, media server 104, authorization server 110 and rendezvous server 112 are coupled to a network 114.

In an embodiment, source device 102 transmits media to media server 104 via a real time streaming protocol (RTSP) and media server 104 relays media to set top box 116 over a cable television network via a QAM- (quadrature amplitude modulation) modulated MPEG-2 transport stream. In another embodiment, source device 102 transmits media to media server 104 via a real time protocol (RTP). Although the embodiments presented herein may use RTSP or RTP, it is to be appreciated that other protocols may be used to transmit and receive media. In an embodiment, network 114 may include a hybrid fiber coaxial (HFC) cable television network or a fiber to the premises (FTTP) network. In an embodiment, network 114 may also include the Internet. It is to be appreciated that the type of network is a design choice, and embodiments of the invention presented herein are not dependent on the type of network used.

Source device 102 may include a processor 120 coupled to a memory 122. Processor 120 may perform the functions described therein as being performed by source device 102 based on instructions stored in memory 122. Source device 102 may also include a personal computation application (PC app) 124 and a streamer 126. Functions performed by PC app 124 and streamer 126 are described in further detail below with respect to FIG. 2. In an embodiment, PC app 124 and streamer 126 are embodied in hardware. In another embodiment, PC app 124 and streamer 126 may be software that run on processor 120 based on instructions stored in memory 122. Display device 118 may be, for example, a TV or any other form of display device, such as, an Apple iPad™ or a mobile communication device, such as a smart phone.

Set top box 116 may include a processor 128 coupled to a memory 130. Processor 128 may perform the functions described herein as being performed by set top box 116 based on instructions stored in memory 130.

Media server 104 may include a processor 128 coupled to a memory 130. Steps described herein are being performed by media server 104 may be performed by processor 128 based on instructions stored in memory 130. Media server 104 may also include a transcoder 132, a stitcher 134, an Active Video Markup Language application (AVML app) 136. Embodiments presented herein may use AVML, but it is to be appreciated that other languages or protocols may be used to implement the functions performed by the AVML app 136. In an example, transcoder 132, stitcher 134 and AVML app 136 may be implemented solely in hardware. In another embodiment, transcoder 132, stitcher 134 and AVML app 136 may be implemented in hardware, software, firmware or any combination thereof. In another example, transcoder 132, stitcher 134 and AVML app 136 may be implemented as software running on processor 128 based on instructions stored in memory 130.

Authentication, authorization and accounting server (AAA) 110 may include a processor 138 coupled to a memory 130. The functions described herein as being performed by authorization server 110 may be performed by a processor 138 based on instructions stored in memory 140. Rendezvous server 112 may include a processor 142 coupled to a memory 144. The functions performed by rendezvous server 112 as described herein may be performed by processor 142 based on instructions stored in memory 144.

According to an embodiment of the invention, to view media stored or streamed by source device 102 on display device 118, a user initiates the PC application 124. In response to the user input, source device 102 authenticates itself with AAA server 110. In response to being authenticated by AAA server, source device 102, opens a transmission control protocol (TCP) session with rendezvous server 112. In an embodiment, source device 102 may use AAA server to authenticate itself to rendezvous server 112.

To view the media streamed by source device 102 on display device 118, the user tunes to a dedicated media relay channel using set top box 116. In response to the user tuning to the media relay channel, the set top box 116 transmits a signal to media server 104 to open a TCP connection with rendezvous server 112. Rendezvous server 112, receives a signal from media server 102 that indicates the media server 102 is ready to receive media from source device 102. Upon receiving the signal from media server 102, rendezvous server 112 transmits a connection address for media server 104 to source device 102. Rendezvous server also notifies the media server 104 of a connection address for source device 102. In an example, the connection address is an Internet Protocol (IP) address and a port number. It is to be appreciated that the type of connection address and protocol used is a design choice. After both the source device 102 and the media server 104 have been provided each other's connection address, rendezvous server 112 closes the connection with the source device 102 and media server 104 closes the connection with rendezvous server 112.

Source device 102, based on the connection address for media server 104, connects to media server 104 and requests the start of an RTSP session by media server 104, to stream media to media server 104. In an alternate embodiment, the source device 102 may start the RTSP session. In response to the request, media server 104 grants the source device 102 permission to transmit media to the media server 104. Streamer 126 streams media to the media server 104. The streamed media is relayed by media server to set top box 116. The relayed media may then be viewed on the on the media relay channel via display device 118. The streamed media may be optionally transcoded by transcoder 132 prior to transmission to set top box 116. Alternatively, media may be transcoded by streamer 126 prior to streaming the media to media server 104. The steps performed by source device 102, authorization 110, rendezvous server 112, media server 104, and set top box 116 are further described below with respect to FIG. 2

FIG. 2 illustrates an example flow diagram 200 that illustrates a media relay process according to an embodiment of the invention.

PC application 124 authenticates source device 102 with AAA server 110 using authentication message 202. It is to be appreciated that any type of authentication may be used including but not limited to Rivest-Shamir-Adleman (RSA), Digital Signature Algorithm (DSA) and Secure Hash Algorithm (SHA).

AAA server 110 sends an authorization message 204 to source device 102. The authorization message 204 may include a Transmission Control Protocol (TCP) address (tcp_ip) and a port address (pc_port).

In response to receiving authorization message 204 from AAA server 110, PC application 124 sends a start streamer command 206 to streamer 126 with an IP address (rv_ip) for rendezvous server 112, a port address (rv_port) for rendezvous server 112 and a session key (skey).

In response to the start streamer command 206, streamer 126 opens a TCP connection with rendezvous server 112 using an open TCP connection command 208.

Streamer 126 authenticates itself with rendezvous server 112 using an authenticate command 210 that includes the session key (skey). Upon successful authentication, rendezvous server 112 open a TCP connection with streamer 126 and keeps the TCP connection with streamer 126 open.

In response to a user tuning to a media relay channel, set top box 116 sends a start application command 212 to stitcher 134 that is located in media server 104.

In response to the start application command 212, stitcher 134 sends a load command 214 to AVML application 136. In response to the load command 214, AVML application 136 sends a Get PC command 216 to AAA server 110. The Get PC command 216 includes a Media Access Control (MAC) address of the set top box 116 and a home ID that identifies the set top box 116 to AAA server 110.

In response to the Get PC command 216, AAA server 110 transmits a stream PC command 218 to AVML application 136. The steam PC command 18 may include the IP address of the rendezvous server 112 (rv_ip), the port address of the rendezvous server 112 (rv_port), the session key (skey) and an alias.

In response to receiving the steam PC command 218, AVML App 136 transmits a transcode command 220 to stitcher 134 that includes the rv_ip, rv_port and the skey. In response to a transcode command 220, stitcher 134 sends a RTSP session start command 222 to transcoder 132 that includes the rv_ip, rv_port and the skey.

Transcoder 132 sends an open TCP connection command 224 to rendezvous server based on rv_ip and rv_port which opens a TCP connection with the rendezvous server 112. Transcoder 132 also authenticates itself to rendezvous server 112 using the authenticate command 226 and session key (skey) received from stitcher 134.

In response to opening the TCP connection with transcoder 132, rendezvous server sends a notify client command 228 to streamer 126. The notify client command 228 includes an IP address (tcn_ip) of transcoder 132 and a port address (tcn_port) of transcoder 132. Rendezvous server 112 also transmits a notify listener command 230 to transcoder 132 that includes an IP address (pcn_ip) of media source 102 and a port address (pcn_port) of the media source 102. Based on the notify listener command 230, transcoder places the source device 102 in a queue. The queue may be a first in first out (FIFO) queue or it may be a queue based on programmable priority levels.

By providing media source 102 with the IP address and port address of transcoder 132 and by providing the IP address and port address of source device 102, rendezvous server 112 bridges source device 102 and media server 104 which may be behind NAT device 106 and NAT device 108. This allow source device 102 to directly connect to media server 104 without any further assistance from rendezvous server 112. Rendezvous server 112 closes the TCP connection with streamer 126 using command 234 and closes the TCP connection with transcoder 132 using command 236.

Streamer 126 sends an open TCP connection command 236 to transcoder 132 with pcn_ip and pcn_port as parameters. When it is the turn of source device 102 in the queue, transcoder 132 transmits a RTSP session start command 238 that commands streamer 126 to stream media to transcoder 132. In response to receiving the RTSP session start command 238, streamer 126 streams media 240 to transcoder 132. Transcoder 132 transcodes media 240 and sends a transcoded stream 242 to stitcher 134. Stitcher 134 transmits a session stream 244 through network 114 (that may include a cable television network) to set top box 116 for display on the display device 118.

Thus, embodiments of the invention allow a user to relay media form a source device 102 to a display device 118 via a media server 104. Furthermore, in the embodiments presented above, rendezvous server 112 acts as a intermediary or a bridge to couple source device 102 to media server 104, one or both of which may be behind a NAT device. Typical NAT traversal techniques require an intermediary server to be active throughout the communication process thereby creating significant delays due to bottlenecks created by the intermediary server. In contrast to typical NAT traversal techniques, there is no further intervention by rendezvous server 112 once it has facilitated a connection between source device 102 to media server 104.

Example Implementation

An example implementation of the media relay system 100 is described below. It is to be appreciated that the implementation is for example purposes only and does not limit the scope of the embodiments presented herein.

In an example, a main communication element from AAA server 10 to AVML APP 136 is a “pcinfo” XML document. This XML structure is augmented with an additional element called “rendezvous” that includes the IP address and port address of the rendezvous server as attributes. A “pc” element may include an additional attribute called “skey” that transmits the session key that is used for match making in the rendezvous server 112. This attribute is mutual exclusive with an “ip address”/“port” attribute pair that is used, if no reversed connect is required. Example XML code is provided below:

<?xml version=“1.0” encoding=“UTF-8”?> <pcinfo>  <status>SUCCESS</status>   <rendezvous ipaddress=“123.456.08.15” port=“4953” />   <pcs>    <pc alias=“Adams PC” streaming=“true” skey=“ab34cdEF043rgq”/>    <pc alias=“Den” streaming=“false” skey =“wq334dfgh2345w2” />    <pc alias=“Office” streaming=“false” skey=“oaIHG43HjIUwe23”/>   </pcs> </pcinfo>

Optional Universal Resource Locator (URL) code is provided below:

<?xml version=“1.0” encoding=“UTF-8”?> <pcinfo>  <status>SUCCESS</status>   <pcs>    <pc alias=“Adams PC” streaming=“true” url=“rdvs://123.456.08.15/ab34cdEF043rgq”/>    <pc alias=“Den” streaming=“false” url=“rdvs://123.456.08.15/wq334dfgh2345w2” />    <pc alias=“Office” streaming=“false” url=“rdvs://123.456.08.15/oaIGH43HjIUwe23”/>   </pcs> </pcinfo>

In an example, the rendezvous server 112 has to send keep-alive messages to the AAA server 110 which maintains a list of active rendezvous server 112. These messages have to include three data elements: (1) a public IP address and port that has to be used by streamer 126; (2) NATTP address and port for NAT device 108 that will be used by the transcoder 132; and (3) A site identification that creates an association between a source device 102 and rendezvous server 112.

In an example, one rendezvous server is used for all sites and it has a single IP address that is available for both the source device 102 and the transcoder 132.

The AAA server 110 may verify the IP of the source device 102 based on a pool of valid IP addresses, to avoid accepting false keep-alive messages from malicious third parties that might result in invalid entries in rendezvous server 112.

In an example rendezvous server 112 is not behind NAT device 108 and may use the URL:

GET/rdvskeepalive?siteid=1234abcdef3241 HTTP/1.0

Example Stitcher to Transcoder Communication

The stitcher 134 may provide the IP address and port of source device 102 to transcoder 123 as media resource information. The rendezvous server initiated process sends the rendezvous server IP address and port address as well as the session key to the transcoder 132. This can be implemented using a combined “rdvs://” URL scheme instead of a “rtsp://” URL. The transcoder can then derive the connection mode from the URL protocol prefix.

Example PC-App to Streamer Communication

The PC-App 124 provides all required configuration values to the streamer 126 as command line arguments. The additional information required for the reversed connection process is thus provided as additional command line arguments. Some arguments are not used in the case of a rendezvous server 112 initiated connection such as:

(1) listen_port—the port the streamer 126 should listen for incoming streaming connections on. This argument is not needed in case of a rendezvous server 112 initiated connection because it is derived from the TCP connection to the rendezvous server 112.

(2) connect_url—The rendezvous server URL including the session key using the “rdvs://” protocol prefix.

The streamer 126 can decide, based on the presence of a connect URL, whether to expose a port directly or negotiate a connection via the rendezvous server 112. The validate message might not be needed in case of a rendezvous initiated connection.

Example Rendezvous Server Protocol

The rendezvous server 112 may use a simple text based protocol that includes the following messages:

  Challenge(challengeKey) Authenticate(authenticateKey, sessionKey [publicIP], [publicPort]) Notify(peerNATIP, peerNATPort)

The challenge message is sent by the rendezvous server 112 to a connecting source device 102 and may include a partially random challenge key that is encrypted with the server key of an RSA key pair. This key is decrypted and re-encrypted by the client (streamer 126 or transcoder 132) using the other key of an RSA key pair. The source device 102 may verify the validity of a non-random part of the challenge key. This re-encrypted key may be sent back by the client as an authenticate key, together with a session key that is used for match making. The rendezvous server 112 uses its key of the RSA key pair to verify the authenticity of source device 102 using the original challenge key and the authenticate key. If it considers the source device 102 to be valid, it decrypts the session key and then attempts to find the peel of this connection in its session dictionary. If this is the first peer, it stores this connection into the session dictionary.

In another example, a less complex authentication procedure may use a salted SHA1 hash. The challenge key is a random number/string generated by the rendezvous server. The response key is the SHA1 hash generated from this random number with a pre-shared fix salt appended to this key.

Rendezvous server 112 may notify both source device 102 and media server 104 when a match is found by sending a notify message, that includes the public IP address and public port number of the opposite NATs. The communication from transcoder 132 to rendezvous server 112 could be as follows:

 T>R open connection  R>T CHALLENGE LF CK=<challengeKey> LF EOT  T>R AUTHENTICATE LF AK=<authenticateKey> LF SK=<sessionKey> LF [IP=<publicIP> LF] PORT=<publicPort> LF EOT  R>T NOTIFY LF IP=<clientNATIP> LF PORT=<clientNATPort> LF EOT  T close connection

The public IP address is not required if the same IP is used for inbound traffic that is used to connect to the rendezvous server. Streamer 126 does not need to send its public IP and port since it can be derived from the connection. An example connection message is as follows:

 T>R open connection  R>T CHALLENGE LF CK=<challengeKey> LF EOT  T>R AUTHENTICATE LF AK=<authenticateKey> LF SK=<sessionKey> LF EOT  R>T NOTIFY LF IP=<publicIP> LF PORT=<publicPort> LF EOT  T close connection

The “challengeKey” and “authenticateKey” may be base 64 encoded binary keys, the “sessionKey” could be encrypted with a decrypted “challengeKey” which is available to rendezvous server 112, streamer 126 and transcoder 132.

Example Security Provisions

To prevent overload or crash of rendezvous server 112, a third party attack such as a Denial of Service (DOS) or an attempt to compromise the rendezvous server 112 and/or source device 102, multiple rendezvous servers 112 may be implemented in a cluster format. In an example, the cluster may include AAA server 110. AAA server 110 provides the IP address of the rendezvous server 112 to both source device 102 and media server 104 and may perform a round robin mechanism when selecting a rendezvous server 112. Rendezvous servers 112 may send keep-alive messages to the AAA server 110 in fixed time distances. If a keep-alive message is not be received by the AAA server 110 after three such intervals, the rendezvous server 112 would be considered dead and taken off the list.

A source device 102 that is unable to communicate with its rendezvous server 112 may either fail with a retry option (and thus getting a fresh rendezvous server 112) or a sorted list of rendezvous servers 112 may be used instead of a single one, giving the source device 102 an option for automatic retry.

The rendezvous server 112 has to keep a TCP connection from source device 102 alive until media server 104 successfully connects. This may consume valuable resources such as ephemeral sockets. Clustering over several physical or virtual machines reduces the risk of running out of resources. A watchdog timer may be used to cancel sessions that wait for an extended time for their peer, e.g. the customer starts the service on the source device 102 but fails to start tune to a media relay channel using STB 116. The watchdog time may cover a typical delay between start of PC App 124 and start of AVML app 136. Considering that there are 30,000 ephemeral sockets on a typical server and a timeout value of 15 minutes, one server could handle a connection rate of approximately 33 session setups per second, if all connections time out. With an average delay of 5 minutes, one server would achieve approximately 100 session setups per second.

The most important defense against a denial of service attack is an early termination of an attacking connection. This has two major requirements, first detecting the attacking connection attempt and second doing this quickly. The use of a challenge and authentication key may allow rendezvous server 112 to detect unauthorized requests. To do this quickly rendezvous server 112 may use a smaller watchdog timer for the period between the challenge-request and authentication-response than the normal session timeout. Another option would be the use of signing the session keys by AAA server 110. A concatenation of the source device 102 public IP address (available to AAA server 110 through a TCP connection) and the session key could be signed with the private key of the AAA server 110. The rendezvous server 112 could then validate the request of the streamer by verifying the signature with the public key.

The transcoder 132 may know an IP address (but not the port) of the source device 102 through notification by the rendezvous server 112, and is therefore able to limit the range of potential malicious attackers early, or deny it before data is received and interpreted.

The transcoder 132 may keep a listening port open that accepts the incoming stream connections and knows the public IP address and port pair (or port only, if it is a 1.1 port mapping NAT forward and the rendezvous server 112 is outside of NAT device 108) that this port will be represented in the open internet. This acceptor is global to the transcoder process, thus implemented as a singleton, and maintains a dictionary of expected connections. The rendezvous handshaking sequence will insert the session key or the public IP address of the expected streamer 126 into this dictionary, and wait for the connection to happen. It is not possible to wait for the incoming connection directly because several connection attempts from different streamers may be pending at the same time. Therefore it is necessary to maintain a dictionary of pending connections.

Streamer

The streamer 126 may use an instance of an RTSP Server which uses an Tcp Acceptor to open a listening port. Assuming that there is always only one connection to this RTSP Server active at any time, it is possible to derive from the RTSP Server and replace the acceptor related connection with a direct connect call after a synchronous connect and communication with the rendezvous server. The RTSP Server receives an input parameter “struct” that could transfer the rendezvous server address and the session key.

Example AAA Server

The AAA server 110 may send an XML file to the PC application 124 and AVML application 136 that includes an IP address of rendezvous server 112 and a one-time session key. AAA server 110 may maintain a list of active rendezvous servers 112 per site based on the received keep-alive messaged.

Example Rendezvous Server

The rendezvous server 112 may run on Linux as well as Windows™, because the physical server has not been determined yet and may have to be shared with other services. The services provided by the rendezvous server 112 may include: (1) announce availability to AAA server 110 using a keep alive-message; (2) accept incoming connections from streamer 126 and transcoder 132; (3) provide challenge keys and validate response keys; (4) store pending connections in dictionary; (5) match connections using the dictionary; and (6) provide response to participating source device 102.

Rendezvous Server Client Protocol Handler

A rendezvous server protocol is used by the streamer 126 and the transcoder 132. The implementation is based on a ucl::ConnectionPoint/ucl::Protocol class family. Each message ends with an Embedded Open Type (EOT) character that can be used to split the incoming data stream into individual messages.

Embodiments presented herein, or portions thereof, can be implemented in hardware, firmware, software, and/or combinations thereof. The embodiments presented herein apply to any communication system that utilizes packets for data transmission.

The representative media relay functions described herein can be implemented using one or more of computer processors, such as one or more of processors 120, 129, 138, 142 and 128, computer logic, application specific circuits (ASIC), digital signal processors, etc., or any combination thereof, as will be understood by those skilled in the arts based on the discussion given herein. Accordingly, any processor that performs the functions described herein is within the scope and spirit of the embodiments presented herein.

Further, the media relay functions described herein could be embodied by computer program instructions that are executed by a computer processor, for example one or more of processor 120, 129, 138, 142 and 128, or any one of the hardware devices listed above. The computer program instructions cause the processor to perform the instructions described herein. The computer program instructions (e.g. software) can be stored in a computer usable medium, computer program medium, or any storage medium that can be accessed by a computer or processor. Such media include a memory device, such as memory 122, 140, 144, 131 and 130, a RAM or ROM, or other type of computer storage medium such as a computer disk or CD ROM, or the equivalent. Accordingly, any computer storage medium having computer program code that cause a processor to perform the functions described herein are within the scope and spirit of the embodiments presented herein.

CONCLUSION

While various embodiments have been described above, it should be understood that they have been presented by way of example, and not limitation. It will be apparent to persons skilled in the relevant art that various changes in form and detail can be made therein without departing from the spirit and scope of the embodiments presented herein.

The embodiments presented herein have been described above with the aid of functional building blocks and method steps illustrating the performance of specified functions and relationships thereof. The boundaries of these functional building blocks and method steps have been arbitrarily defined herein for the convenience of the description. Alternate boundaries can be defined so long as the specified functions and relationships thereof are appropriately performed. Any such alternate boundaries are thus within the scope and spirit of the claimed embodiments. One skilled in the art will recognize that these functional building blocks can be implemented by discrete components, application specific integrated circuits, processors executing appropriate software and the like or any combination thereof. Thus, the breadth and scope of the present embodiments should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents. 

What is claimed is:
 1. A method for displaying media using a media server, comprising: establishing a first connection by the media server with a rendezvous server in response to receiving a signal at the media server indicating selection of a cable television channel by a destination device at a first user's premises; sending, by the media server, a first command to an authentication server that includes a Media Access Control (MAC) address of the destination device and an identification for the destination device in response to receiving the signal; receiving a second command at the media server from the authentication server, in response to the first command, that includes an Internet Protocol (IP) address of the rendezvous server, a port address of the rendezvous server, a session key, and an alias; using the rendezvous server to establish a second connection between a source device located at a second user's premises and the media server; receiving a command from the rendezvous server to close the first connection between the rendezvous server and the media server such that there is no further intervention by the rendezvous server in communications between the source device and the media server after the second connection is established; receiving, at the media server, the streaming media from the source device after closing the first connection between the rendezvous server and the media server; transmitting the streaming media from the media server over the cable television channel to the destination device, wherein the media server is located remotely from the first user's premises and the second user's premises; establishing a Transmission Control Protocol (TCP) connection with the rendezvous server based on the IP address of the rendezvous server, the port address of the rendezvous server, and the session key; sending a first message to the rendezvous server to indicate that the media server is ready to receive a connection from the source device; receiving a second message from the rendezvous server indicating that the source device is ready to connect to the media server, wherein the message from the rendezvous server includes an IP address of the source device and a port address of the source device; queuing the source device in a queue; receiving a request for connection from the source device, wherein the request includes the IP address of the source device and the port address of the source device; servicing the request from the source device for a TCP connection based on a position of the source device in the queue and a queuing algorithm; transmitting a third message to the source device to stream media using a Real Time Streaming Protocol (RTSP) or Real Time Protocol (RTP); and receiving the streaming media from the source device.
 2. The method of claim 1, wherein the first user's premises and the second user's premises are the same.
 3. The method of claim 1, wherein the media server is located at a cable television headend.
 4. The method of claim 1, further comprising: transcoding, at the media server, the received media from a first format to a second format, prior to streaming the media to the destination device.
 5. The method of claim 1, wherein the receiving the streaming media comprises receiving the streaming media via the RTSP or RTP, and wherein the transmitting comprises transmitting over the cable television channel via a Moving Pictures Experts Group (MPEG) transport stream.
 6. The method of claim 1, wherein the transmitting comprises: transmitting the streaming media from the media server over the cable television channel to a television or a set-top box.
 7. The method of claim 1, wherein the source device comprises: a personal computer, a laptop, or a media player located at the second user's premises.
 8. The method of claim 1, wherein the source device is behind a Network Address Translation (NAT) device, and wherein the receiving the streaming media comprises: using at least one of port forwarding, Universal Plug and Play (UPnP), and a proxy server when receiving the streaming media.
 9. The method of claim 1, wherein the source device is behind a Network Address Translation (NAT) device, and wherein the receiving the streaming media comprises: not using port forwarding, Universal Plug and Play (UPnP) on the NAT device, or a proxy server when receiving the streaming media.
 10. The method of claim 1, wherein the signal further indicates that the first user has activated a media relay application.
 11. The method of claim 10, further comprising: activating the media relay application in response to the selection of the cable television channel using the destination device, wherein the destination device comprises a set-top box or a television.
 12. The method of claim 1, further comprising: transmitting a server rendezvous request from the media server to the rendezvous server, in response to receiving the signal from the destination device, the server rendezvous request comprising a first target network address of the media server; and receiving the first connection by the media server at the first target network address from the source device for receiving media from the source device.
 13. A media server configured to relay media to a destination device at a first user's premises from a source device at a second user's premises, comprising: a processor; and a memory, coupled to the processor, configured to store instructions that configure the processor to: establish a first connection with a rendezvous server in response to receiving a signal indicating selection of a cable television channel from the destination device at the first user's premises; send a first command to an authentication server that includes a Media Access Control (MAC) address of the destination device and an identification for the destination device in response to receiving the signal; receive a second command from the authentication server, in response to the first command, that includes an Internet Protocol (IP) address of the rendezvous server, a port address of the rendezvous server, a session key, and an alias; establish a second connection with the source device using the rendezvous server, receive a command from the rendezvous server to close the first connection between the rendezvous server and the media server such that there is no further intervention by the rendezvous server in communications between the source device and the media server after the second connection is established; receive the streaming media from the source device after the first connection with the rendezvous server is closed; stream the media over the cable television channel to the destination device, wherein the media server is located remotely from the first user's premises and the second user's premises; establish a Transmission Control Protocol (TCP) connection with the rendezvous server based on the IP address of the rendezvous server, the port address of the rendezvous server, and the session key; send a first message to the rendezvous server to indicate that the media server is ready to receive the second connection from the source device; receive a second message from the rendezvous server indicating that the source device is ready to connect to the media server, wherein the message from the rendezvous server includes an IP address of the source device and a port address of the source device; queue the source device in a queue; receive a request for connection from the source device, wherein the request includes the IP address of the source device and the port address of the source device; service the request from the source device for a TCP connection based on a position of the source device in the queue and a queuing algorithm; transmit a third message to the source device to stream media using a Real Time Streaming Protocol (RTSP) or Real Time Protocol (RTP), and receive the streaming media from the source device.
 14. The media server of claim 13, wherein the first user's premises and the second user's premises are the same.
 15. The media server of claim 13, wherein the media server is located at a cable television headend, and wherein the media is streamed to the destination device at first user's premises via a cable television network.
 16. The media server of claim 13, wherein the instructions further configure the processor to: transcode the received media from a first format to a second format for streaming to the destination device.
 17. The media server of claim 13, wherein the instructions further configure the processor to: receive the streaming media via the RTSP or RTP and stream the media via a Moving Pictures Experts Group (MPEG) transport stream.
 18. The media server of claim 13, wherein the destination device comprises: a television or a set-top box coupled to the television.
 19. The media server of claim 13, wherein the source device comprises: a personal computer, laptop or media player.
 20. The media server of claim 13, wherein the source device is behind a Network Address Translation (NAT) device, and reception of media from the source device is effectuated by using at least one of port forwarding, Universal Plug and Play (UPnP), and a proxy server.
 21. The media server of claim 13, wherein the source device is behind a Network Address Translation (NAT) device, and reception of media from the source device is effectuated without using port forwarding, Universal Plug and Play (UPnP) on the NAT device, or a proxy server.
 22. The media server of claim 13, wherein the signal further indicates that the first user has activated a media relay application.
 23. The media server of claim 22, wherein the media relay application is activated in response to the selection of the cable television channel using the destination device and wherein the destination device comprises a set-top box or television.
 24. The media server of claim 13, wherein the instructions further configure the processor to: transmit a server rendezvous request from the media server to the rendezvous server, in response to receiving the signal from the destination device, the server rendezvous request comprising a first target network address of the media server; and receive the second connection at the first target network address from the source device, for receiving media from the source device.
 25. The method of claim 1, wherein, prior to the receiving the command, the method further comprises: receiving the IP address of the source device and the port address of the source device.
 26. The method of claim 1, wherein the IP address of the rendezvous server, the port address of the rendezvous server, the session key, and the alias are generated by the source device.
 27. A non-transitory computer readable medium that includes instructions that when executed cause a media server to perform steps comprising: establishing a first connection by the media server with a rendezvous server in response to receiving a signal at the media server indicating selection of a cable television channel by a destination device at a first user's premises; sending, by the media server, a first command to an authentication server that includes a Media Access Control (MAC) address of the destination device and an identification for the destination device in response to receiving the signal; receiving a second command at the media server from the authentication server, in response to the first command, that includes an Internet Protocol (IP) address of the rendezvous server, a port address of the rendezvous server, a session key, and an alias; using the rendezvous server to establish a second connection between a source device located at a second user's premises and the media server; receiving a command from the rendezvous server to close the first connection between the rendezvous server and the media server such that there is no further intervention by the rendezvous server in communications between the source device and the media server after the second connection is established; receiving, at the media server, the streaming media from the source device after closing the first connection between the rendezvous server and the media server; transmitting the streaming media from the media server over the cable television channel to the destination device, wherein the media server is located remotely from the first user's premises and the second user's premises; establishing a Transmission Control Protocol (TCP) connection with the rendezvous server based on the IP address of the rendezvous server, the port address of the rendezvous server, and the session key; sending a first message to the rendezvous server to indicate that the media server is ready to receive a connection from the source device; receiving a second message from the rendezvous server indicating that the source device is ready to connect to the media server, wherein the message from the rendezvous server includes an IP address of the source device and a port address of the source device; queuing the source device in a queue; receiving a request for connection from the source device, wherein the request includes the IP address of the source device and the port address of the source device; servicing the request from the source device for a TCP connection based on a position of the source device in the queue and a queuing algorithm; transmitting a third message to the source device to stream media using a Real Time Streaming Protocol (RTSP) or Real Time Protocol (RTP); and receiving the streaming media from the source device.
 28. The non-transitory computer readable medium of claim 27, wherein the first user's premises and the second user's premises are the same.
 29. The non-transitory computer readable medium of claim 27, wherein the media server is located at a cable television headend.
 30. The non-transitory computer readable medium of claim 27, wherein the steps further comprise: transcoding, at the media server, the received media from a first format to a second format, prior to streaming the media to the destination device.
 31. The non-transitory computer readable medium of claim 27, wherein the receiving the streaming media comprises receiving the streaming media via the RTSP or RTP, and wherein the transmitting comprises transmitting over the cable television channel via a Moving Pictures Experts Group (MPEG) transport stream.
 32. The non-transitory computer readable medium of claim 27, wherein the transmitting the streaming media comprises: transmitting the streaming media from the media server over the cable television channel to a television or a set-top box.
 33. The non-transitory computer readable medium of claim 27, wherein the source device comprises: a personal computer, a laptop, or a media player located at the second user's premises.
 34. The non-transitory computer readable medium of claim 27, wherein the source device is behind a Network Address Translation (NAT) device, and wherein the receiving the streaming media comprises: using at least one of port forwarding, Universal Plug and Play (UPnP), and a proxy server when receiving the streaming media.
 35. The non-transitory computer readable medium of claim 27, wherein the source device is behind a Network Address Translation (NAT) device, and wherein the receiving the streaming media comprises: not using port forwarding, Universal Hug and Play (UFnP) on the NAT device, or a proxy server when receiving the streaming media.
 36. The non-transitory computer readable medium of claim 27, wherein the signal further indicates that the first user has activated a media relay application.
 37. The non-transitory computer readable medium of claim 36, wherein the steps further comprise: activating the media relay application in response to the selection of the cable television channel using the destination device, wherein the destination device comprises a set-top box or a television.
 38. The non-transitory computer readable medium of claim 27, wherein the steps further comprise: transmitting a server rendezvous request from the media server to the rendezvous server, in response to receiving the signal from the destination device, the server rendezvous request comprising a first target network address of the media server; and receiving the first connection by the media server at the first target network address from the source device for receiving media from the source device. 